const { app, session, BrowserWindow } = require('electron')
const path = require('path')

let win = null
app.whenReady().then(()=>{
    createWindow()
})

function createWindow() {
    // webPreferences 中两个属性（session,partition）可以创建不同的 session, 当session与partition同时存在时，session优先级更高
    // const s1 = session.defaultSession
    const s = session.fromPartition('test',{cache:true}) // 创建session对象
    win = new BrowserWindow({
        width: 1200,
        height: 800,
        webPreferences: {
            session: s, // 指定一个session对象
            partition: 'new' // 指定一个partition字符串
          }
    })

    // win.loadFile(path.join(__dirname,'../renderer/index.html'))
    // win.webContents.openDevTools({mode: 'bottom'})

    win.loadURL('https://www.ip138.com')


    console.log(session.defaultSession === win.webContents.session) // false
    console.log(win.webContents.session === newSession) // true

}

// 创建session方法
function createSession() {
    const s1 = session.fromPartition('hello')
    const s2 = session.fromPartition('world',{cache: false})
    const s3 = session.fromPartition('hello',{chache:true})
    console.log(s1===s2,'s1===s2')
    console.log(s1===s3,'s1===s3')
    console.log(s2===s3,'s2===s3')

    const ses = session.fromPartition("persist:name")
    console.log(ses.getUserAgent(),'getuseragent')

}

// 设置代理
function setProxy() {
     // 设置代理
     win.webContents.session.setProxy({
        proxyRules: 'socks5://127.0.0.1:13659',
    })
    win.webContents.session.resolveProxy('https://www.baidu.com').then((info) => console.log(info))
}

// 页面缓存
function setCached() {
    // 此处设置的cache并不是完全禁用缓存,可以理解为硬盘缓存。
    const newSession = session.fromPartition('new', { cache: false })
    win = new BrowserWindow({ width: 400, height: 300, webPreferences: { session: newSession } })
}

// 资源加载
function setPreloads() {
    const newSession = session.fromPartition('new', { cache: false })
        const win = new BrowserWindow({
            width: 400,
            height: 300,
            webPreferences: {
                session: newSession,
                preload: path.join(__dirname, '../preload/index.js'),
                },
        })
        win.loadURL('https://www.baidu.com')
        const preloads = newSession.getPreloads()
        console.log(preloads) // []
        newSession.setPreloads([
            path.join(__dirname, '../preload/p1.js'),
            path.join(__dirname, '../preload/p2.js'),
        ])
        console.log(newSession.getPreloads())
        /*
        [
        '/Users/keliq/electron-desktop/src-apis/session/preload/p1.js',
        '/Users/keliq/electron-desktop/src-apis/session/preload/p2.js'
        ]
        */
}

// 本地存储
async function setStorage() {
    // 本地存储getStoragePath(获取存储路径),clearStorageData(清空存储数据),flushStorageData(将数据持久化存储到磁盘)
    const newSession1 = session.fromPartition('new', { cache: false })
    console.log(newSession1.getStoragePath()) // null

    const newSession2 = session.fromPartition('persist:new', { cache: true })
    console.log('getCacheSize', await newSession2.getCacheSize())
    await newSession2.clearCache()
    console.log('getCacheSize', await newSession2.getCacheSize())
    console.log(newSession2.getStoragePath())

    setTimeout(() => newSession2.flushStorageData(), 3000)
    setTimeout(async () => console.log('getCacheSize', await newSession2.getCacheSize()), 3000)
}

// 权限控制
function setAuth() {
    session.defaultSession.setDisplayMediaRequestHandler((request, callback) => {
        desktopCapturer.getSources({ types: ['screen'] }).then((sources) => {
            callback({ video: sources[0] })
        })
    })
}

// cookie
function setCookie() {
    // 查询所有cookies
    session.defaultSession.cookies.get({}).then((cookies)=>{
        console.log(cookies,'cookie')
    }).catch(err=>{
        console.log(err)
    })
    
    // 设置一个 cookie，使用设置的名称；
    // 如果存在，则会覆盖原先 cookie.
    const cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }
    session.defaultSession.cookies.set(cookie)
    .then(() => {
        // success
    }, (error) => {
        console.error(error)
    })

    // 删除cookie
    session.defaultSession.cookies.remove({ url: 'http://www.github.com', name: 'dummy_name'})
}